package com.silence.gmall.product.assembler;

import com.silence.gmall.product.domain.entity.SkuSaleAttrValue;
import com.silence.gmall.product.dto.SkuSaleAttrValueDto;
import com.silence.gmall.product.record.SkuContext;
import org.mapstruct.*;

import java.util.List;

/**
 * @Author silence
 * @Date 2025-08-18 23:11
 * @Email 792245022@qq.com
 * @Version 1.0
 * @Description sku销售属性值工厂
 */
@Mapper(componentModel = MappingConstants.ComponentModel.SPRING)
public interface SkuSaleAttrValueFactory {

    /**
     * 将 SkuSaleAttrValueDto 转换为 SkuSaleAttrValue
     *
     * @param source 源对象
     * @return 目标对象
     */
    @Named("skuSaleAttrValueDto2SkuSaleAttrValueWithContext")
    @Mapping(target = "skuId", expression = "java(skuContext.getSkuId())")
    @Mapping(target = "spuId", expression = "java(skuContext.getSpuId())")
    SkuSaleAttrValue skuSaleAttrValueDto2SkuSaleAttrValueWithContext(SkuSaleAttrValueDto source, @Context SkuContext skuContext);

    /**
     * 将 SkuSaleAttrValueDtoList 转换为 SkuSaleAttrValueList
     *
     * @param source 源对象
     * @return 目标对象
     */
    @Named("skuSaleAttrValueDtoList2SkuSaleAttrValueListWithContext")
    @IterableMapping(qualifiedByName = "skuSaleAttrValueDto2SkuSaleAttrValueWithContext")
    List<SkuSaleAttrValue> skuSaleAttrValueDtoList2SkuSaleAttrValueListWithContext(List<SkuSaleAttrValueDto> source, @Context SkuContext skuContext);

}
